package com.song.aop;

import com.song.Bean.User;
import com.song.BeanFactoryTest.UserServiceImplBean2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * @Description: Spring：类描述
 * @author: songzhangyong
 * @Date: 2019/10/29 17:00
 */


/**
 * todo 这里的 @Configuration 写不写都不影响spring的ComponentScan扫描，但是会有差异 ，为什么呢 ？？？？？？？？？、
 * 这里会生成cglb的代理，具体以后在看。 可以观察下面 “ UserServiceImplBean2 测试打印的次数 ”
 * 加了 @Configuration 后打印一次，不加打印两次 。
 * 因为加了@Configuration之后会生成代理对象，然后当调用方法的时候，会进行factoryBean的判断，判断工厂中是否有这个bean，从而不再new
 * todo 需要查资料
 *
 * 主要是加了 @Configuration 的类会设置一个full属性
 *
 */
@Configuration
@ComponentScan(value = {"com.song.aop" })
@EnableAspectJAutoProxy

public class SpringAOPConfig {


	@Bean
	public UserServiceImplBean2 userServiceImplBean2(){
		return new UserServiceImplBean2();
	}

	@Bean
	public User user(){
		userServiceImplBean2();
		return new User();
	}
}
